package com.ruoyi.system.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ruoyi.system.domain.Product;
import com.ruoyi.system.domain.ProductUse;
import com.ruoyi.system.mapper.ProductUseMapper;
import com.ruoyi.system.service.IProductService;
import com.ruoyi.system.service.IProductUseService;

/**
 * 备品使用Service业务层处理
 * 
 * @author ruoyi
 * @date 2022-02-11
 */
@Service
public class ProductUseServiceImpl implements IProductUseService {
	@Autowired
	private ProductUseMapper productUseMapper;
	@Autowired
	private IProductService productService;

	/**
	 * 查询备品使用
	 * 
	 * @param id
	 *            备品使用ID
	 * @return 备品使用
	 */
	@Override
	public ProductUse selectProductUseById(Long id) {
		return productUseMapper.selectProductUseById(id);
	}

	/**
	 * 查询备品使用列表
	 * 
	 * @param productUse
	 *            备品使用
	 * @return 备品使用
	 */
	@Override
	public List<ProductUse> selectProductUseList(ProductUse productUse) {
		return productUseMapper.selectProductUseList(productUse);
	}

	/**
	 * 新增备品使用
	 * 
	 * @param productUse
	 *            备品使用
	 * @return 结果
	 */
	@Override
	@Transactional
	public int insertProductUse(ProductUse productUse) {
		Product product = new Product();
		product.setId(productUse.getInstanceId());
		product.setScanoutNum(productUse.getUseNum());
		int ret = productService.scanoutIventory(product);
		if(ret==0){
			throw new RuntimeException("剩余数量已不够，请刷新检查一下实际剩余数量.");
		}
		return productUseMapper.insertProductUse(productUse);
	}

	/**
	 * 修改备品使用
	 * 
	 * @param productUse
	 *            备品使用
	 * @return 结果
	 */
	@Override
	public int updateProductUse(ProductUse productUse) {
		return productUseMapper.updateProductUse(productUse);
	}

	/**
	 * 批量删除备品使用
	 * 
	 * @param ids
	 *            需要删除的备品使用ID
	 * @return 结果
	 */
	/*@Override
	public int deleteProductUseByIds(Long[] ids) {
		return productUseMapper.deleteProductUseByIds(ids);
	}*/

	/**
	 * 删除备品使用信息
	 * 
	 * @param id
	 *            备品使用ID
	 * @return 结果
	 */
	@Override
	@Transactional
	public int deleteProductUseById(Long id) {
		ProductUse productUse = this.selectProductUseById(id);
		if(productUse==null){
			throw new RuntimeException("该备品使用记录已经被删除过，请刷新页面。");
		}
		Product product = new Product();
		product.setId(productUse.getInstanceId());
		product.setScaninNum(productUse.getUseNum());
		int ret = productUseMapper.deleteProductUseById(id);
		if(ret==0){
			throw new RuntimeException("该备品使用记录已经被删除过，请刷新页面。");
		}
		return productService.scaninIventory(product);
	}
}
